访问电脑版页面

导航:老古开发网手机版STM32单片机Keil MDK编程

STM32单片机半主机模式的应用

导读:
关键字:
STM32单片机,keil,

在keil中编程时常会遇到__use_no_semihosTIng_swi的警告,这时你就是进入了半主机模式。

在嵌入式的编程中你是避免不了使用printf、fopen、fclose等函数的但是因为嵌入式的程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosTIng_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中:

#pragmaimport(__use_no_semihosTIng_swi)#pragmaimport(_main_redirecTIon)constchar__stdin_name[150];constchar__stdout_name[150];constchar__stderr_name[150];typedefintFILEHANDLE;//重写标准库函数,这时printf、fopen、fclose等文件操作函数运行时就会调用你的重写函数,这些重写函数只是几个简单的例子,并没有重写所有的文件操作函数void_sys_exit(intstatus){while(1);}FILEHANDLE_sys_open(constchar*name,intopenmode){return0;}int_sys_close(FILEHANDLEfh){return0;}int_sys_write(FILEHANDLEfh,constunsignedchar*buf,unsignedlen,intmode){return0;}int_sys_read(FILEHANDLEfh,unsignedchar*buf,unsignedlen,intmode){return0;}int_sys_istty(FILEHANDLEfh){return0;}int_sys_seek(FILEHANDLEfh,longpos){return0;}int_sys_ensure(FILEHANDLEfh){return0;}long_sys_flen(FILEHANDLEfh){return0;}int_sys_tmpnam(char*name,intfileno,unsignedmaxlength){return0;}void_ttywrch(intch){}time_ttime(time_t*t){return0;}intremove(constchar*filename){return0;}char*_sys_command_string(char*cmd,intlen){return0;}clock_tclock(void){return0;}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

若出现如下编译错误:Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced,此时你只需重写_ttywrch 函数即可

MDK上开启半主机模式-需要SWO线(换言之,需要使用JTAG接线)

当目标板脱离仿真器(jlink/ulink)单独运行时,不能使用半主机模式

pragma import(__use_no_semihosting_swi)

这条语句可以关闭半主机模式,只需要在任意一个C文件中加入即可。

还有在使用keil编程的过程中还会遇到。.\OBJ\USART.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced

说的大概的意思就是关掉了半主机模式,但是函数__ttywrch被要求了,这时要把函数重写一遍,当然出现其他的函数被要求的时候,可以参考上面的函数进行编写,只要放到任意一个.c源文件之中即可。

关于 microlib

microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。

microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。

来源:工程师周亮   作者:lhl545545  2018/12/18 15:43:00
栏目: [ STM32单片机Keil MDK编程]

相关阅读

keil4和keil5的区别以及Keil5的安装激活教程解析

如何在STM32单片机的MDK工程中使用printf

KEILv5 STM32 程序在APP与BOOTLOADER共用方法

基于STM32对DS1302的驱动

Keil MDK3.20的stm32调试方法

STM32的数据类型基础介绍

基于keil mdk 标准外设库的软件开发

获取STM32 MCU唯一ID的方法

KEIL工具可通过MPS对基于CORTEX-M处理器的系统建立样机

STM32F4 C++ 封装库 之 EXTI

STM32单片机半主机模式的应用

如何构建STM32单片机keil的开发环境

基于stm32的keil开发环境搭建

基于STM32的MDK程序启动

基于Keil 5版本单片机编程软件中MDK的应用技巧解析

STM32单片机在KIEL4配置开发中的设置

新建STM32工程全局声明两个宏的原因

stm32之.hex 文件

如何创建一个STM32工程模板

stm32笔记: 将用户自定义关键字从MDK3.8 搬到 MDK4.70A